home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / Music / PLAY / MultiPlayer / MultiPlayer132Src.lha / settingswin.c < prev    next >
C/C++ Source or Header  |  1992-09-14  |  8KB  |  368 lines

  1. /*
  2.  * MultiPlayer
  3.  * Copyright (C) 1992 Bryan Ford
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  *
  19.  * I (the author of MultiPlayer) can be contacted on the Internet at
  20.  * "bryan.ford@m.cc.utah.edu".  See "Player.doc" for other addresses.
  21.  *
  22.  * $Id: settingswin.c,v 4.3 92/07/19 18:07:58 BAF Exp $
  23.  *
  24.  * $Log:    settingswin.c,v $
  25.  * Revision 4.3  92/07/19  18:07:58  BAF
  26.  * Adjustment for putting localdata back into RemindNodes
  27.  * 
  28.  * Revision 4.2  92/06/21  11:12:42  BAF
  29.  * Migrated regargs to stdargs
  30.  *
  31.  * Revision 4.1  92/06/06  19:56:36  BAF
  32.  * Major_code_cleanup
  33.  *
  34.  * Revision 3.1  92/05/25  07:53:14  BAF
  35.  * GNU-ized.
  36.  *
  37.  *
  38.  */
  39.  
  40. #include <exec/types.h>
  41. #include <exec/execbase.h>
  42. #include <intuition/intuition.h>
  43. #include <libraries/asl.h>
  44. #include <proto/exec.h>
  45. #include <proto/dos.h>
  46. #include <proto/intuition.h>
  47. #include <proto/wb.h>
  48.  
  49. #include "bry/macros.h"
  50. #include "bry/remind.h"
  51. #include "bry/misc.h"
  52. #include "bry/guido.h"
  53.  
  54. #include "player.h"
  55.  
  56. extern GuidoSpec settingswindowspec;
  57. extern short settingswinleft, settingswintop;
  58.  
  59. extern struct MPWin mpwin;
  60.  
  61. struct Gadget *settingsmodgad, *settingsvolumegad,
  62.   *settingsbalancegad, *settingsbalanceresetgad,
  63.   *settingsspeedgad, *settingsntscgad, *settingspalgad,
  64.   *settingsendgad, *settingsendsetgad, *settingsendcleargad,
  65.   *settingsfiltergad,
  66.   *settingstempogad, *settingsendfadegad;
  67.  
  68. static long check(long sigmask);
  69. void settingswinupdate(void);
  70. static void totalupdate(void);
  71.  
  72. static struct ModNode *oldmod;
  73. static short oldvol, oldbal, oldspeed;
  74. static char oldfilter;
  75. static long oldend;
  76.  
  77. static struct MPWin mpwin = {settingswindowspec,&settingswinleft,totalupdate,
  78.   {0},{{0},check},{0}};
  79.  
  80. static long
  81. check(long sigmask)
  82. {
  83.   if((sigmask & mpwin.sigmask) && GCheckPanel(mpwin.win,standardcallback,0L))
  84.     setfinmpwin(&mpwin);
  85.   return(0);
  86. }
  87.  
  88. static void
  89. showend(void)
  90. {
  91.   if(!mpwin.win || !selmod)
  92.     return;
  93.  
  94.   if(selmod->endtime)
  95.     {
  96.     extern struct ExecBase *SysBase;
  97.     static char buf[32];
  98.     long endtime = selmod->endtime/SysBase->VBlankFrequency;
  99.  
  100.       sprintf(buf,"%ld:%02ld:%02ld",
  101.         endtime/(60*60),
  102.         (endtime/60)%60,
  103.         endtime%60);
  104.       GSetText(mpwin.win,settingsendgad,buf);
  105.     }
  106.   else
  107.     GSetText(mpwin.win,settingsendgad,"(none)");
  108. }
  109.  
  110. static void
  111. showspeed(void)
  112. {
  113.   if(!mpwin.win || !selmod)
  114.     return;
  115.   if(selmod->speed)
  116.     GSetSliderLevel(mpwin.win,settingsspeedgad,selmod->speed);
  117. }
  118.  
  119. static void
  120. settingschanged(void)
  121. {
  122.   if(selmod)
  123.     GlobPostMod(&selmod,settingswinupdate);
  124. }
  125.  
  126. void
  127. gui_settingsvolume(struct GuidoMessage *gm)
  128. {
  129.   if((selmod) && (selmod->volume >= 0))
  130.     selmod->volume = oldvol = gm->Code,
  131.     settingschanged();
  132. }
  133.  
  134. void
  135. gui_settingsbalance(struct GuidoMessage *gm)
  136. {
  137.   if((selmod) && (selmod->volume >= 0))
  138.     selmod->balance = oldbal = gm->Code,
  139.     settingschanged();
  140. }
  141.  
  142. void
  143. gui_settingsbalancereset(struct GuidoMessage *gm)
  144. {
  145.   if((selmod) && (selmod->volume >= 0))
  146.     selmod->balance = oldbal = 0,
  147.     settingschanged();
  148.   GSetSliderLevel(mpwin.win,settingsbalancegad,0);
  149. }
  150.  
  151. static void
  152. speed(int speed)
  153. {
  154.   if((selmod) && (selmod->speed))
  155.     selmod->speed = oldspeed = speed,
  156.     settingschanged();
  157. }
  158.  
  159. void
  160. gui_settingsspeed(struct GuidoMessage *gm)
  161. {
  162.   speed(gm->Code);
  163. }
  164.  
  165. void
  166. gui_settingspal(struct GuidoMessage *gm)
  167. {
  168.   speed(50);
  169.   showspeed();
  170. }
  171.  
  172. void
  173. gui_settingsntsc(struct GuidoMessage *gm)
  174. {
  175.   speed(60);
  176.   showspeed();
  177. }
  178.  
  179. void
  180. gui_settingsendset(struct GuidoMessage *gm)
  181. {
  182. extern long songtime;
  183.  
  184.   if(selmod)
  185.     selmod->endtime = songtime,
  186.     showend(),
  187.     settingschanged();
  188. }
  189.  
  190. void
  191. gui_settingsendclear(struct GuidoMessage *gm)
  192. {
  193.   if(selmod)
  194.     selmod->endtime = 0,
  195.     showend(),
  196.     settingschanged();
  197. }
  198.  
  199. void
  200. gui_settingsfilter(struct GuidoMessage *gm)
  201. {
  202.   if((selmod) && (selmod->filter >= 0))
  203.     selmod->filter = oldfilter = gm->Code,
  204.     settingschanged();
  205. }
  206.  
  207. void
  208. gui_settingsendfade(struct GuidoMessage *gm)
  209. {
  210.   if((selmod) && (selmod->volume >= 0))
  211.     {
  212.       if(GGetCheckboxChecked(settingsendfadegad))
  213.         selmod->flags |= MNF_ENDFADE;
  214.       else
  215.         selmod->flags &= ~MNF_ENDFADE;
  216.       settingschanged();
  217.     }
  218. }
  219.  
  220. void
  221. gui_settingstempo(struct GuidoMessage *gm)
  222. {
  223.   if((selmod) && !(selmod->flags & MNF_NOTPROTRACKER))
  224.     {
  225.       if(GGetCheckboxChecked(settingstempogad))
  226.         selmod->flags |= MNF_PTTEMPO;
  227.       else
  228.         selmod->flags &= ~MNF_PTTEMPO;
  229.       settingschanged();
  230.     }
  231. }
  232.  
  233. void
  234. gui_settingsok(void)
  235. {
  236.   setfinmpwin(&mpwin);
  237. }
  238.  
  239. void
  240. gui_settingscurrent(void)
  241. {
  242.   GlobSetLong(&selmod,curmod,0L);
  243. }
  244.  
  245. static void
  246. resetold(void)
  247. {
  248.   oldfilter = oldvol = oldbal = oldspeed = 120;
  249.   oldend = -1;
  250.   oldmod = 0;
  251. }
  252.  
  253. void settingswinupdate(void)
  254. {
  255. struct Window *win = mpwin.win;
  256. int endis;
  257.  
  258.   if(!win)
  259.     return;
  260.   if(selmod)
  261.     {
  262.       if(oldmod != selmod)
  263.         GSetText(win,settingsmodgad,selmod->nameptr);
  264.  
  265.       // Volume settings
  266.       if(selmod->volume >= 0)
  267.         GSetCheckboxChecked(win,settingsendfadegad,(selmod->flags & MNF_ENDFADE) != 0);
  268.       if((oldvol != selmod->volume) || (oldbal != selmod->balance))
  269.         {
  270.           endis = 0;
  271.           if(selmod->volume >= 0)
  272.             {
  273.               GSetSliderLevel(win,settingsvolumegad,selmod->volume);
  274.               GSetSliderLevel(win,settingsbalancegad,selmod->balance);
  275.               endis = 1;
  276.             }
  277.           GEnDisGadgets(win,endis,
  278.             settingsvolumegad,
  279.             settingsbalancegad,
  280.             settingsbalanceresetgad,
  281.             settingsendfadegad,
  282.             0L);
  283.           oldvol = selmod->volume;
  284.           oldbal = selmod->balance;
  285.         }
  286.  
  287.       /* Speed settings */
  288.       if(oldspeed != selmod->speed)
  289.         {
  290.           showspeed();
  291.           GEnDisGadgets(win,selmod->speed,settingsspeedgad,settingsntscgad,settingspalgad,0L);
  292.           oldspeed = selmod->speed;
  293.         }
  294.  
  295.       /* Song end */
  296.       if(oldend != selmod->endtime)
  297.         {
  298.           showend();
  299.           oldend = selmod->endtime;
  300.         }
  301.       GEnDisGadget(win,curmod == selmod,settingsendsetgad);
  302.       GEnDisGadget(win,1,settingsendcleargad);
  303.  
  304.       /* Filter */
  305.       if(oldfilter != selmod->filter)
  306.         {
  307.           endis = 0;
  308.           if(selmod->filter >= 0)
  309.             GSetCycleActive(win,settingsfiltergad,selmod->filter),
  310.             endis = 1;
  311.           GEnDisGadget(win,endis,settingsfiltergad);
  312.           oldfilter = selmod->filter;
  313.         }
  314.  
  315.       /* Protracker tempo commands */
  316.       endis = 0;
  317.       if(!(selmod->flags & MNF_NOTPROTRACKER))
  318.         GSetCheckboxChecked(win,settingstempogad,selmod->flags & MNF_PTTEMPO),
  319.         endis = 1;
  320.       GEnDisGadget(win,endis,settingstempogad);
  321.     }
  322.   else
  323.     {
  324.       GSetText(win,settingsmodgad,"");
  325.       GSetText(win,settingsendgad,"");
  326.  
  327.       GEnDisGadgets(win,0,
  328.         settingsvolumegad,
  329.         settingsbalancegad,
  330.         settingsbalanceresetgad,
  331.         settingsspeedgad,
  332.         settingsntscgad,
  333.         settingsendsetgad,
  334.         settingsendcleargad,
  335.         settingsfiltergad,
  336.         settingspalgad,
  337.         settingsendfadegad,
  338.         settingstempogad,
  339.         0L);
  340.       resetold();
  341.     }
  342.   oldmod = selmod;
  343. }
  344.  
  345. static void
  346. totalupdate(void)
  347. {
  348.   resetold();
  349.   settingswinupdate();
  350. }
  351.  
  352. char *
  353. settingswinopenclose(void)
  354. {
  355.   if(mpwin.win)
  356.     {
  357.       setfinmpwin(&mpwin);
  358.       return(0L);
  359.     }
  360.   return(openmpwin(&mpwin));
  361. }
  362.  
  363. void
  364. gui_settingswinopenclose(void)
  365. {
  366.   showerr(settingswinopenclose());
  367. }
  368.